/*
 * @Author       : Sayolit
 * @Date         : 2023-02-25 22:23:17
 * @LastEditors  : Sayolit
 * @LastEditTime : 2023-07-04 11:59:55
 * @FilePath     : index.js
 * @Description  :
 * Copyright 2023 Sayolit, All Rights Reserved.
 * 2023-02-25 22:23:17
 */
import { createRouter, createWebHashHistory } from 'vue-router'
import { ElMessage } from 'element-plus'
import index from '../views/index.vue'
import storage from '../utils/storage'
import NProgress from 'nprogress' // 引入nprogress插件
import 'nprogress/nprogress.css' // 这个nprogress样式必须引入

// import { useStore } from 'vuex'
// const store = useStore()
import store from '../store/index'

// transition: fade(out-in) | slide | scale(out-in) | scale-slide

// transition: fade|slide|scale|scale-slide

const routes = [
	{
		path: '/',
		name: 'Index',
		//推荐使用这种方法
		component: index,
		meta: { keepAlive: false },
	},
	{
		path: '/test',
		name: 'Test',
		//推荐使用这种方法
		component: () => import('../views/test/test.vue'),
	},
	{
		path: '/404',
		name: '404',
		//推荐使用这种方法
		component: () => import('../views/errorPage/404.vue'),
	},
	{
		path: '/guidePage',
		name: 'GuidePage',
		//推荐使用这种方法
		component: () => import('../views/guidePage/guidePage.vue'),
		meta: {},
	},
	{
		path: '/apiTest',
		name: 'ApiTest',
		//推荐使用这种方法
		component: () => import('../views/apiPage/apiPage.vue'),
	},
]

const router = createRouter({
	history: createWebHashHistory(),
	routes,
})

// 白名单--不需要 token 就可以直接访问的页面 /login /regisiter /404
const whiteList = [
	'/',
	'/404',
	'/testPage',
	'/guidePage',
	'/storeTest',
	'/test',
	'/apiTest',
]
// 路由导航守卫
// from 来自哪
// to 要去哪
// next() 是一个函数 必须使用
// 使用: next() 直接放行  // next('/路径名') 跳转到指定页面
//调用路由实例对象的beforeEach()方法-声明"全局前置守卫"
//每次发生路由导航跳转的时候，就会自动触发回调函数

router.beforeEach((to, from, next) => {
	NProgress.start()
	console.log('from ' + from.path, '-->', to.path)
	if (to.path != '/') window.document.title = to.name

	// 获取 Vuex里面的 loginStatus
	const loginStatus = storage.getItem('loginStatus')
	store.commit('userStore/changeLRStatus', false)
	// 是否登录
	if (loginStatus) {
		// // 有
		// // 是否去登录页 ？
		// if (to.path === '/login') {
		// 	// 去登录页
		// 	next('/') // 回首页
		// 	console.log('用户已经登录，不能去登录页面')
		// } else {
		// 	// 不去登录页
		next() // 放行
		NProgress.done()
		// }
	} else {
		// 没有 token
		// 是否去白名单 ？
		if (whiteList.includes(to.path)) {
			// 去白名单
			next() // 放行
			NProgress.done()
		} else {
			// 不去白名单
			router.push('/404')
			setTimeout(() => {
				next('/')
				router.to(0)
			}, 4200)
			store.commit('userStore/changeLRType', 0)
			store.commit('userStore/changeLRStatus', true)
			// next('/login') // 去登录页
		}
	}
})
export default router
